817D - Imbalanced Array - CodeForces Solution


data structures divide and conquer dsu sortings *1900

Please click on ads to support us..

C++ Code:

#include <bits/stdc++.h>
#define ll long long
#define INF 0x3f3f3f3f
#define N 1000007
using namespace std;
int n, a[N], l[N], r[N];
ll ans;
inline int read(){
    int ans = 0, f = 1;
	char ch = getchar();
	for(; ch < '0' || ch > '9'; ch = getchar())
		if (ch == '-')
		    f = 0;
	for(; ch >= '0' && ch <= '9'; ch = getchar())
	    ans = (ans << 3) + (ans << 1) + ch - 48;
	return f? ans: -ans;
}
int main(){
    n = read();
    ans = 0;
    for (int i = 1;i <= n; ++i)
	    a[i] = read();
    for (int i = 1; i <= n; ++i)
	    l[i] = r[i] = i;
    for (int i = 2; i <= n; ++i){
        int now = i;
        while (now > 1 && a[i] >= a[now - 1])
		    now = l[now - 1];
        l[i] = now;
    }
    for (int i = n - 1; i >= 1; --i){
        int now = i;
        while (now < n && a[i] > a[now + 1])
		    now = r[now + 1];
        r[i] = now;
    }
    for (int i = 1;i <= n; ++i)
	    ans += (ll)a[i] * (ll)(i - l[i] + 1) * (ll)(r[i] - i + 1);
    for (int i = 2; i <= n; ++i){
        int now = i;
        while (now > 1 && a[i] <= a[now - 1])
		    now = l[now - 1];
        l[i] = now;
    }
    for (int i = n - 1; i >= 1; --i){
        int now = i;
        while (now < n && a[i] < a[now + 1])
		    now = r[now + 1];
        r[i] = now;
    }
    for (int i = 1;i <= n; ++i)
	    ans -= (ll)a[i] * (ll)(i - l[i] + 1) * (ll)(r[i] - i + 1);
    printf("%lld\n", ans);
}
	    	   	 	  	 		 	  	 		  			


Comments

Submit
0 Comments
More Questions

97. Interleaving String
543. Diameter of Binary Tree
124. Binary Tree Maximum Path Sum
1465. Maximum Area of a Piece of Cake After Horizontal and Vertical Cuts
501A - Contest
160A- Twins
752. Open the Lock
1535A - Fair Playoff
1538F - Interesting Function
1920. Build Array from Permutation
494. Target Sum
797. All Paths From Source to Target
1547B - Alphabetical Strings
1550A - Find The Array
118B - Present from Lena
27A - Next Test
785. Is Graph Bipartite
90. Subsets II
1560A - Dislike of Threes
36. Valid Sudoku
557. Reverse Words in a String III
566. Reshape the Matrix
167. Two Sum II - Input array is sorted
387. First Unique Character in a String
383. Ransom Note
242. Valid Anagram
141. Linked List Cycle
21. Merge Two Sorted Lists
203. Remove Linked List Elements
733. Flood Fill